package stream.sort;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class Sort {

    public static void main(String[] args) {
        List<Obj> list = Arrays.asList(
                new Obj("政府", null),
                new Obj("政府", new BigDecimal("1216.23")),
                new Obj("商业", new BigDecimal("123.23")),
                new Obj("PPD", new BigDecimal("123.23")),
                new Obj("合作", new BigDecimal("127.23")),
                new Obj("合作", new BigDecimal("125.23")),
                new Obj("咨询", null),
                new Obj(null, null)
        );
		
		/*Comparator<Obj> byName =  Comparator.comparing(Obj::getName).reversed();
		
		Comparator<Obj> finalByPrice= byName.thenComparing(Obj::getPrice,Comparator.nullsFirst(BigDecimal::compareTo)).reversed();
		
		List<Obj> result = list.stream().filter(new Predicate<Obj>() {
			    @Override
			    public boolean test(Obj obj) {
			    	if(obj.getName() == null && obj.getPrice() ==null){
			    		return false;
			    	}
			    	return true;
			    }
		    }).sorted(finalByPrice).collect(Collectors.toList());*/

        List<Obj> result = list.stream().sorted(
                //先按照name排序（模拟需求的a属性排序）
                Comparator.comparing(Obj::getName, (x, y) -> {
                            if (x == null && y != null) {
                                return 1;
                            } else if (x != null && y == null) {
                                return -1;
                            } else if (x == null && y == null) {
                                return -1;
                            } else if ("PPD".equals(x) || "PPD".equals(y)) {
                                if (x.equals(y)) {
                                    return 0;
                                } else if ("PPD".equals(x)) {
                                    return -1;
                                } else {
                                    return 1;
                                }
                            } else if ("合作".equals(x) || "合作".equals(y)) {
                                if (x.equals(y)) {
                                    return 0;
                                } else if ("合作".equals(x)) {
                                    return -1;
                                } else {
                                    return 1;
                                }
                            } else if ("政府".equals(x) || "政府".equals(y)) {
                                if (x.equals(y)) {
                                    return 0;
                                } else if ("政府".equals(x)) {
                                    return -1;
                                } else {
                                    return 1;
                                }
                            }
                            return 0;
                        })
                        //再按照其他字段排序，要考虑null（模拟需求b和c字段排序）
                        .thenComparing(Comparator.comparing(Obj::getPrice,
                                Comparator.nullsFirst(BigDecimal::compareTo)).reversed()
                        )).collect(Collectors.toList());
        System.out.println(result);
        System.out.println(result.size());
    }
}
